//用队列实现栈
import java.util.LinkedList;
import java.util.Queue;

public class MyStack2 {
    private Queue<Integer> qu1;
    private Queue<Integer> qu2;

    public MyStack2() {
        qu1 = new LinkedList<>();
        qu2 = new LinkedList<>();
    }
    //入队列
    public void push(int x) {
        if(!qu1.isEmpty()){//qu1不为空
            qu1.offer(x);
        }else if(!qu2.isEmpty()){//qu2不为空
            qu2.offer(x);
        }else{//qu1和qu2都为空
            qu1.offer(x);
        }
    }
    //出队列
    public int pop() {
        if(empty()){
            return -1;//判断两个队列都为空,意味着当前的栈为空
        }
        if(!qu1.isEmpty()){//qu1队列不为空
            int size = qu1.size();//在循环出队列的时候，队列当中的元素在减少，要使用一个变量记录队列当中元素的个数，不能直接将qu1.size()作为循环的结束条件
            for(int i = 0;i < size - 1;i++){
                int val = qu1.poll();//记录出qu1队列的值
                qu2.offer(val);//将qu1中出来的值，放入到qu2中
            }
            return qu1.poll();
        }else{//qu2队列不为空
            int size = qu2.size();
            for(int i = 0;i < size - 1;i++){
                int val = qu2.poll();//记录出qu1队列的值
                qu2.offer(val);//将qu1中出来的值，放入到qu2中
            }
            return qu2.poll();
        }
    }
    //peek,查看栈顶元素
    public int top() {
        if(empty()){
            return -1;//判断两个队列都为空,意味着当前的栈为空
        }
        if(!qu1.isEmpty()){//qu1队列不为空
            int size = qu1.size();//在循环出队列的时候，队列当中的元素在减少，要使用一个变量记录队列当中元素的个数，不能直接将qu1.size()作为循环的结束条件
            int val = -1;
            for(int i = 0;i < size - 1;i++){
                val = qu1.poll();//记录出qu1队列的值
                qu2.offer(val);//将qu1中出来的值，放入到qu2中
            }
            return val;
        }else{//qu2队列不为空
            int size = qu2.size();
            int val = -1;
            for(int i = 0;i < size - 1;i++){
                val = qu2.poll();//记录出qu1队列的值
                qu2.offer(val);//将qu1中出来的值，放入到qu2中
            }
            return val;
        }
    }

    public boolean empty() {
        return qu1.isEmpty() && qu2.isEmpty();
    }

}
